#include <bits/stdc++.h>
using namespace std;

// int stack[10001];
// int top=1;

int main()
{
    stack<int> s;

    // n个数
    int n;
    cin >> n;

    // n个数的出站顺序
    int a[n+1];
    for(int i=1; i<=n; i++)
        cin >> a[i];

    // 是否已被访问过
    bool visited[n+1];
    bzero(visited, sizeof(visited));

    // 逐个扫描每个元素
    for(int i=1; i<=n; i++)
    {
        // 将 s.top() ... a[i]-1 中未被访问过的元素入栈
        for(int k=(s.empty()?1:(s.top()+1)); k<a[i]; k++)
        {
            if(!visited[k])
            {
                s.push(k);
                visited[k] = true;
            }
        }

        visited[a[i]] = true;

        if(a[i] == s.top())
        {
            s.pop();
        }

        else if(a[i] < s.top())
        {
            cout << "NO" << endl;
            return 0;
        }
    }

    cout << "YES" << endl;
    return 0;
}


//     int n;
//     cin>>n;
//     for(int i=1;i<=n;i++)
//     {
//         int d;
//         cin>>d;

//         // 将小于第一个数的其余数字全部入栈
//         if(i==1)
//         {
//             top=d-1;
//             for(int j=1;j<=top;j++)
//                 stack[j]=j;
//         }

//         // 如果刚好是
//         else if(top==d)
//         {
//             stack[top]=0;
//             top--;
//         }

//         else if(d<top)
//         {
//             cout<<"NO";
//             return 0;
//         }
//     }
//     cout<<"YES";
//     return 0;
// }